package ar.com.tallerdos.smartdinner.activity;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ListView;
import ar.com.tallerdos.smartdinner.R;
import ar.com.tallerdos.smartdinner.adapter.SeleccionMultipleAdapter;
import ar.com.tallerdos.smartdinner.model.Identity;

public abstract class SeleccionMultipleActivity<T extends Identity & Comparable<T>> extends Activity {
    
    public static final String PRE_SELECCION = "ar.com.tallerdos.smartdinner.activity.SeleccionMultipleActivity";
    public static final String SEPARADOR_IDS = ",";

    
    protected SeleccionMultipleAdapter<T> adapter = null;
    protected List<T> seleccion;
    protected List<T> items;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	Intent intent = getIntent();
	
	String mesasSeleccionadasIds = intent.getStringExtra(SeleccionMultipleActivity.PRE_SELECCION);
	seleccion = new ArrayList<T>();
	
	if (mesasSeleccionadasIds != null && !mesasSeleccionadasIds.isEmpty()) {
	    for (String s : mesasSeleccionadasIds.split(SeleccionMultipleActivity.SEPARADOR_IDS)) {
		seleccion.add(getItemById(Integer.valueOf(s)));
	    }
	}
	
	setContentView(R.layout.seleccionar_mesas_activity);
	cargarItems();
	onFinishCreate();
    }

    protected abstract void cargarItems();

    public void seleccionarMesas(View view) {
	if (!seleccionValida()) {
	    return;
	}
	
	Intent returnIntent = new Intent();
	
	String idsMesasSeleccionadas = "";
	for (int i = 0; i < this.items.size(); i++) {
	    if (adapter.getItemsSeleccionados()[i]) {
		idsMesasSeleccionadas += this.items.get(i).getId() + ",";
	    }
	}
	if (!idsMesasSeleccionadas.isEmpty()) {
	    idsMesasSeleccionadas = idsMesasSeleccionadas.substring(0,
		    idsMesasSeleccionadas.length() - 1);
	}
	returnIntent.putExtra("result", idsMesasSeleccionadas);
	setResult(RESULT_OK, returnIntent);
	finish();
    }
    
    protected boolean seleccionValida() {
	return true;
    }

    @Override
    public void onBackPressed() {
	Intent returnIntent = new Intent();
	setResult(RESULT_CANCELED, returnIntent);
	finish();
    }
    
    protected void setUpAdapter() {
	ListView mesasListado = (ListView) findViewById(R.id.mesasListado);
	this.adapter = new SeleccionMultipleAdapter<T>(this, this.items, this.seleccion);
	mesasListado.setAdapter(this.adapter);
    }
    
    protected void onFinishCreate() {
	setUpAdapter();
    }
    
    protected abstract T getItemById(Integer id);
    
}
